﻿#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
using namespace std;

int Findcur(vector<int>& arr)
{
    int dest = 0;
    int cur = 0;
    while (dest < arr.size())
    {
        if (arr[cur] == 0)
        {
            dest += 2;
            cur++;
        }
        else
        {
            dest++;
            cur++;
        }
    }
    return cur;
}

void duplicateZeros(vector<int>& arr)
{
    int cur = Findcur(arr);
    int dest = arr.size() - 1;
    if (arr[dest] == 0)
    {
        cur--;
        dest -= 2;
    }
    while (cur >= 0)
    {
        if (arr[cur] != 0)
        {
            arr[dest] = arr[cur];
            dest--;
            cur--;
        }
        else
        {
            arr[dest] = arr[cur];
            dest--;
            arr[dest] = arr[cur];
            dest--;
            cur--;
        }
    }
}

int main()
{
	int arr[] = { 1,0,2,3,0,4,5,0 };
    int sz = sizeof(arr) / sizeof(arr[0]);
	vector<int> v(arr, arr + sz);
    duplicateZeros(v);
	for (auto ch : v)
	{
		cout << ch << " ";
	}
	cout << endl;
	return 0;
}

//int main()
//{
//
//	int ar[] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	int n = sizeof(ar) / sizeof(int);
//
//	vector<int> v(ar, ar + n);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(100);
//
//	v.resize(20);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//
//	v.reserve(50);
//
//	v.resize(5);
//
//	cout << v.size() << ":" << v.capacity() << endl;
//	return 0;
//}
//


//
//#include <string>
//#include <iostream>
//#include <algorithm>
//using namespace std;
//
//
//int main()
//{
//    string s1;
//    getline(cin, s1);
//    transform(s1.begin(), s1.end(), s1.begin(), ::tolower);
//    int eng = 0, space = 0, num = 0, other = 0;
//    for (auto ch : s1)
//    {
//        if (ch <= 'z' && ch >= 'a')
//        {
//            eng++;
//        }
//        else if (ch == ' ')
//        {
//            space++;
//        }
//        else if (ch >= '0' && ch <= '9')
//        {
//            num++;
//        }
//        else
//        {
//            other++;
//        }
//    }
//    cout << eng << endl;
//    cout << space << endl;
//    cout << num << endl;
//    cout << other << endl;
//    return 0;
//}